#define _CRT_SECURE_NO_WARNINGS
//void reverse(int* nums, int start, int end) {
//    while (start < end) {
//        int temp = nums[start];
//        nums[start] = nums[end];
//        nums[end] = temp;
//        start++;
//        end--;
//    }
//}
//
//void rotate(int* nums, int numsSize, int k) {
//    k %= numsSize;
//    reverse(nums, 0, numsSize - 1);
//
//    reverse(nums, 0, k - 1);
//
//    reverse(nums, k, numsSize - 1);
//}
//
////
//int missingNumber(int* nums, int numsSize)
//{
//    int sum = 0;
//    for (int i = 0; i < numsSize; i++)
//    {
//        sum += nums[i];
//    }
//    int add = numsSize + numsSize * (numsSize - 1) * 1 / 2;
//    return add - sum;
//}
//typedef struct ListNode ListNode;
//int kthToLast(struct ListNode* head, int k)
//{
//    ListNode* fast = head, * slow = head;
//    while (k)
//    {
//        fast = fast->next;
//        k--;
//    }
//    while (fast)
//    {
//        fast = fast->next;
//        slow = slow->next;
//    }
//    return slow->val;
//}
/////////
//struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB)
//{
//    int m = 1, n = 1;
//    struct ListNode* curA = headA;
//    struct ListNode* curB = headB;
//    while (curA->next)
//    {
//        curA = curA->next;
//        m++;
//    }
//    while (curB->next)
//    {
//        curB = curB->next;
//        n++;
//    }
//    if (curA != curB)
//        return NULL;
//    int gap = abs(m - n);
//    struct ListNode* fast = headA;
//    struct ListNode* slow = headB;
//    if (m < n)
//    {
//        fast = headB;
//        slow = headA;
//    }
//    while (gap--)
//    {
//        fast = fast->next;
//    }
//    while (fast != slow)
//    {
//        fast = fast->next;
//        slow = slow->next;
//    }
//    return slow;
//}



